/**
 * @file file.h
 * @author lcz (you@domain.com)
 * @brief
 * @version 0.1
 * @date 2022-11-06
 *
 * @copyright Copyright (c) 2022
 */

#ifndef FILE_H
#define FILE_H
#include "comm/types.h"
#define FILE_NAME_SIZE 32    // 文件名称大小
#define FILE_TABLE_SIZE 2048 // 可打开的文件数量

struct _fs_t;

/**
 * @brief 文件类型列表
 */
typedef enum _file_type_t
{
    FILE_UNKNOWN = 0,
    FILE_TTY,
    FILE_NORMAL,
    FILE_DIR,

} file_type_t;
/**
 * @brief 文件结构体
 */
typedef struct _file_t
{
    char file_name[FILE_NAME_SIZE];
    file_type_t type;
    uint32_t size;    // 文件大小
    int ref;          // 被打开次数
    int dev_id;       // 对应的设备号
    int pos;          // 记录当前文件读写的位置
    int mode;         // 读写模式
    int p_index;      // 在父目录中的索引
    int sblk;         //起始块号，簇号
    int cblk;         //当前正在读取的簇
    struct _fs_t *fs; // 所在的文件系统

} file_t;

void file_table_init(void);
file_t *file_alloc(void);
void file_free(file_t *file);
void file_inc_ref(file_t *file);
#endif /* FILE_H */
